#pragma once
#include "glm/glm.hpp"
#include "glm/gtc/matrix_transform.hpp"
#include "FysicsEngine/TimeStep.h"

namespace Fysics
{
	enum ObjectType
	{
		type_SolidBody,
		type_Particle,
		type_Stream,
		type_Light,
		type_Camera
	};

	class Object
	{
	public:
		glm::vec3 m_Position;
	public:
		Object(glm::vec3 position = glm::vec3(0, 0, 0));
		virtual ~Object() {};

		void SetPos(glm::vec3 newPos);
		void SetPos(float x, float y, float z);
		void SetX(float x);
		void SetY(float y);
		void SetZ(float z);

		inline glm::vec3 GetPos() const { return m_Position; }
		inline float GetX() const { return m_Position.x; }
		inline float GetY() const { return m_Position.y; }
		inline float GetZ() const { return m_Position.z; }

		virtual ObjectType GetType() const = 0;
		virtual glm::mat4 GetModelMatrix() const;
		virtual void Draw() {}
		virtual void Run(Timestep time) {}
	};
}